// 语法
// {} 模板替换
// {数字} 模板替换(为数组里面的第几个)
// @: 要链接到另一个区域设置消息键
// @.lower: 链接中所有字符都小写
// @.upper: 链接中所有字符都大写
// @.capitalize: 链接中第一个字符大写
// {    }   @   $   | 为特殊字符
//  car: 'car | cars', 使用 $tc('car', 1)
// 还有 $d $n 等 英文文档地址:https://vue-i18n.intlify.dev/guide/essentials/datetime.html

import { createI18n } from 'vue-i18n'
import zh_CN from './lang/zh_CN'
import shareds from "@/common/utils/shared";
import moment from "moment";
import updateLocale from 'moment/plugin/updateLocale';
moment.extend(updateLocale);
export const defaultLang = 'zh_CN'
const messages = {
  'zh_CN': {
    ...zh_CN
  },
}
const i18n = createI18n({
  silentTranslationWarn: true,
  locale: defaultLang,
  fallbackLocale: defaultLang,
  messages
})
const loadedLanguages = [defaultLang]
const setI18nLanguage = (lang) => {
  i18n.global.locale = lang;
  document.querySelector('html').setAttribute('lang', lang);
  return lang
};

export const loadLanguageAsync = (lang = defaultLang) => {
  return new Promise(resolve => {
    // 缓存语言设置
    shareds.setStorage("lang", lang);
    if (i18n.global.locale !== lang) {
      if (!loadedLanguages.includes(lang)) {
        return import(`./lang/${lang}`).then(msg => {
          const locale = msg.default
          i18n.global.setLocaleMessage(lang, locale)
          loadedLanguages.push(lang)
          moment.updateLocale(locale.momentName, locale.momentLocale)
          return resolve(setI18nLanguage(lang))
        })
      }
      return resolve(setI18nLanguage(lang))
    }
    return resolve(lang)
  })
};

export const t = (key) => {
  return i18n.global.t(`${key}`)
}

export default i18n;